package jee6.ch4;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.GregorianCalendar;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;

/**
 * @author tony
 *
 */
//@WebFilter("/RevenuePlacement")
public class FiltreNavigateur implements Filter {
  
  FileOutputStream fichier = null;
  PrintWriter outFichier = null;
  String idIE = null;
  String idFF = null;
  String idChrome = null;
  
  
  public void init(FilterConfig filterConfig) throws ServletException {
    
    System.out.println("filtre methode init()");
    
    try {
      fichier = new FileOutputStream(filterConfig.getInitParameter("nomFichierLog"));
      outFichier = new PrintWriter(fichier);
      idIE = filterConfig.getInitParameter("idIE");
      idFF = filterConfig.getInitParameter("idFF");
      idChrome = filterConfig.getInitParameter("idChrome");
    } catch (FileNotFoundException ex) {
      //Logger.getLogger(FiltreNavigateur.class.getName()).log(Level.SEVERE, "message erreur", ex);
      //Logger.getLogger(FiltreNavigateur.class.getName()).log(null, ex);
    }
    System.out.println("filtre methode init() fin");
    
  }
  
  
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    
    System.out.println("filtre methode doFilter()");
    
    HttpServletRequest requete;
    String navigateur;
    String message;
    requete = (HttpServletRequest)request;
    navigateur = requete.getHeader("user-agent");
    
    if (navigateur.toUpperCase().contains(idIE.toUpperCase())) {
      message = "IE : " + new GregorianCalendar().getTime().toString();
      outFichier.println(message);
    } else if (navigateur.toUpperCase().contains(idFF.toUpperCase())) {
      message = "FF : " + new GregorianCalendar().getTime().toString();
      outFichier.println(message);
    } else if (navigateur.toUpperCase().contains(idChrome.toUpperCase())) {
      message = "Chrome : " + new GregorianCalendar().getTime().toString();
      outFichier.println(message);
    } else {
      message = "Inconnu : " + new GregorianCalendar().getTime().toString();
      outFichier.println(message);
    }
    outFichier.flush();
    
    // appel du filtre
    chain.doFilter(request, response);
    
    System.out.println("filtre methode doFilter() fin");
  }
  
  
  public void destroy() {
    System.out.println("filtre methode destroy()");
    
    try {
      outFichier.close();
      fichier.close();
    } catch (IOException ex) {
    	//Logger.getLogger(FiltreNavigateur.class.getName()).log(null, ex);
    }
    
    System.out.println("filtre methode destroy() fin");
  }
  
}
